8   ' *** (FFT07.00A) FFT FIRST TEST ***

10 SCREEN 9, 1, 1: COLOR 15, 1

20 Q = 8: Q2 = Q / 2: DIM Y(Q)

30 PI = 3.141592653589793#: P2 = 2 * PI: K1 = P2 / Q: K2 = P2 / Q

50 CLS : PRINT SPC(30); "MAIN MENU": PRINT : PRINT

60 PRINT SPC(5); "1 = ANALYZE COS COMPONENT TRIANGLE": PRINT

62 PRINT SPC(5); "2 = EXIT": PRINT

70 PRINT SPC(10); "MAKE SELECTION :";

80 A$ = INKEY$: IF A$ = "" THEN 80

90 A = VAL(A$): ON A GOSUB 600, 990

95 GOTO 50

100   ' *** FFT ***

108 ' * COMPUTE EVEN DFT *

110 FOR J = 0 TO Q2: J1 = K1 * J * 2

112 FOR I = 0 TO Q2 - 1

114 C1(J) = C1(J) + Y(2 * I) * COS(J1 * I)

116 S1(J) = S1(J) + Y(2 * I) * SIN(J1 * I)

118 NEXT I

120 C1(J) = C1(J) / Q: S1(J) = S1(J) / Q

122 NEXT J

124   ' * COMPUTE ODD DFT *

126 FOR J = 0 TO Q2: J1 = K1 * J * 2

128 FOR I = 0 TO Q2 - 1

130 C2(J) = C2(J) + Y(2 * I + 1) * COS(J1 * I)

132 S2(J) = S2(J) + Y(2 * I + 1) * SIN(J1 * I)

134 NEXT I

136 C2(J) = C2(J) / Q: S2(J) = S2(J) / Q

138 NEXT J

139   ' * SUM HALF DFTS *

140 FC(0) = C1(0) + C2(0): FS(0) = 0

142 FC(1) = C1(1) + C2(1) * COS(K2) - S2(1) * SIN(K2)

144 FS(1) = S1(1) + C2(1) * SIN(K2) + S2(1) * COS(K2)

146 FC(2) = C1(2) + C2(2) * COS(2 * K2) - S2(2) * SIN(2 * K2)

148 FS(2) = S1(2) + C2(2) * SIN(2 * K2) + S2(2) * COS(2 * K2)

150 FC(3) = C1(3) + C2(3) * COS(3 * K2) - S2(3) * SIN(3 * K2)

152 FS(3) = S1(3) + C2(3) * SIN(3 * K2) + S2(3) * COS(3 * K2)

154   ' * CREATE LATENT TERMS *

156 FC(4) = C1(0) + C2(0) * COS(4 * K2) - S2(0) * SIN(4 * K2)

158 FS(4) = S1(0) + C2(0) * SIN(4 * K2) + S2(0) * COS(4 * K2)

160 FC(5) = C1(1) + C2(1) * COS(5 * K2) - S2(1) * SIN(5 * K2)

162 FS(5) = S1(1) + C2(1) * SIN(5 * K2) + S2(1) * COS(5 * K2)

164 FC(6) = C1(2) + C2(2) * COS(6 * K2) - S2(2) * SIN(6 * K2)

166 FS(6) = S1(2) + C2(2) * SIN(6 * K2) + S2(2) * COS(6 * K2)

168 FC(7) = C1(3) + C2(3) * COS(7 * K2) - S2(3) * SIN(7 * K2)

170 FS(7) = S1(3) + C2(3) * SIN(7 * K2) + S2(3) * COS(7 * K2)

175 RETURN

200 '  ***  PRINT DATA ROUTINE  ***

204 CLS : PRINT "FREQ    F(COS)       F(SIN)     ";

106 PRINT "FREQ    F(C0S)       F(SIN)": PRINT

210 FOR Z = 0 TO Q / 2

215 GOSUB 300

220 NEXT Z

222 PRINT : PRINT "     TIME ="; T9 / 1000

225 INPUT "     ENTER TO CONTINUE:"; A$

230 RETURN

300 PRINT USING "##_    "; Z;

310 PRINT USING "+##.#####_    "; FC(Z); FS(Z);

315 PRINT USING "##_    "; Z + Q2;

320 PRINT USING "+##.#####_    "; FC(Z + Q2); FS(Z + Q2)

330 RETURN

400   ' GENERATE COS COMPONENT TRIANGLE

410 FOR I = 0 TO Q - 1: Y(I) = 0

420 FOR J = 1 TO Q2 STEP 2: Y(I) = Y(I) + COS(K1 * J * I) / (J * J): NEXT

430 NEXT

440 RETURN

600 CLS ' ****  ANALYZE COS COMPONENT TRIANGLE  ****

605 FOR J = 0 TO Q: C1(J) = 0: C2(J) = 0: S1(J) = 0: S2(J) = 0: NEXT

610 GOSUB 400 ' GENERATE INPUT WAVE

612 T9 = TIMER ' DO TRANSFORM 1000 TIMES TO GET SIGNIFICANT TIME

620 FOR Z = 1 TO 1000

622 GOSUB 100 ' ANALYZE WAVE

624 NEXT Z

628 T9 = TIMER - T9

630 GOSUB 200 ' PRINT RESULTS

640 RETURN

990 STOP



